<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 构造函数

      // 工厂模式：类，生产对象；
      // 工厂模式的缺点  ：性能不好，占用内存；
      // function Person(name){
      //     let obj = {};
      //     obj.name = name;
      //     obj.fn = function(){
      //         console.log("fn");
      //     }
      //     return obj;
      // }

      // let zhangsan = Person("张三");
      // // zhangsan.fn();
      // let lisi  = Person("李四");
      // // lisi.fn();
      // console.log(zhangsan.fn===lisi.fn);

      // let obj1 = function(){
      //     console.log("fn");
      // }
      // let obj2 = function(){
      //     console.log("fn");
      // }
      // console.log(obj1===obj2); //如果是true 那么证明obj1和obj2是一个内存空间；否则不是

      // let obj1 = function(){
      //     console.log("fn");
      // }

      // let obj2 = obj1;
      // console.log(obj1===obj2);

      // 构造函数：提供一个公共的空间来存放 复杂数据类型（函数）；
      // 构造函数 constructor
      // 构造函数的调用：new 来调用；
      // 公共空间就是原型；
      function Person(name) {
        // let obj = {}  --->obj  === this;
        // let obj  ={};
        this.name = name;
        // return this;
      }
      Person.prototype.fn = function () {
        console.log("fn");
      };

      // new 调用函数 ：1.创建一个空对象。2.把创建的空对象和函数内的this绑定 3.隐式返还这个对象
      let zhangsan = new Person("张三");
      zhangsan.fn();
      let lisi = new Person("李四");
      lisi.fn();
      console.log(zhangsan.fn === lisi.fn);
    </script>
  </body>
</html>
